//
//  Status.swift
//  3月5的项目
//
//  Created by 哦哦 on 16/3/12.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit
import AFNetworking
class Status: NSObject {
    
    //	微博创建时间
    var created_at: String?
    //微博id  Int 和 OC 中的 NSInteger 是一样的  在OC中 需要使用 long long
    //NSInteger 在32机型上 默认的整形数据的长度 是32位的
    // 在64机型上 默认的整形数据的长度 是64位的
    var id: Int64 = 0
    
    //微博正文
    var text: String?
    //微博来源
    var source: String?
    
    //用户属性
    var user : User?
    //转发微博数据
     var retweeted_status: Status?
    
    //配图字典数组
    var pic_urls: [[String : String]]? {
        didSet {
            //给imageURLs赋值
            guard let urls = pic_urls else {
                //如果pic_urls为空 直接不给 imageURLs赋值
                return
            }
            
            
            //实例化属性
            imageURLs = [NSURL]()
            for item in urls {
                let urlString = item["thumbnail_pic"]
                let largeurlString = urlString?.stringByReplacingOccurrencesOfString("thumbnail", withString: "large")
                //相信后端给定的 第一个 '!' urlString  一定存在
                //第二个 '!' 相信后端给定的url一定可以得到NSURL对象
                let url = NSURL(string: largeurlString!)!
                imageURLs?.append(url)
            }
        }
    }
    
    //视图层 需要用什么数据 在模型层 就直接处理好 外界直接使用就行啦
    var imageURLs: [NSURL]?
    
    
    
    init(dict: [String : AnyObject]) {
        super.init()
        //循环遍历键值 给对象发送 setValue: forKey的消息
        setValuesForKeysWithDictionary(dict)
    }
    
    override func setValue(value: AnyObject?, forKey key: String) {
       //需要对 user 做特殊处理
        if key == "user"{
            guard let dict = value as? [String : AnyObject] else {
                 //不能转换为字典类型
                return
            }
         
            //字典转模型
             user = User(dict: dict)
            //必须要添加return  不然字典转模型就白做了
            return
        }
        
        
        
        if key == "retweeted_status"{
            guard let dict = value as? [String : AnyObject] else {
                //不能转换为字典类型
                return
            }
            
            //字典转模型
            retweeted_status = Status(dict: dict)
            //必须要添加return  不然字典转模型就白做了
            return
        }
        
        
        super.setValue(value, forKey: key)
        
    }
    
    
    //过滤
    override func setValue(value: AnyObject?, forUndefinedKey key: String) { }
    
    
    //MARK: 重写描述方法
    override var description: String {
        let keys = ["id","text","created_at","source"]
        let dict = self.dictionaryWithValuesForKeys(keys)
        return dict.description
        
    }
    
}


//网络访问
//tableView 需要 模型数组数据  字典转模型
extension Status {

//    class func loadHomeData(finished: (array: [Status]?) -> ()) {
//    class func loadHomeData(since_id: Int64, finished: (array: [Status]?) -> () ) {
    class func loadHomeData(since_id: Int64,max_id: Int64, finished: (array: [Status]?) -> () ) {

 let urlStirng = "https://api.weibo.com/2/statuses/home_timeline.json"
    
        guard let token = UserAccount.shareAccount.access_token else {
            print("用户为登录,或者登录过期")
            return
            
            
        }
//    let parameters = ["access_token" : token]
        var parameters = ["access_token" : token]
        //下拉刷新
        if since_id > 0 {
            //将since_id添加到参数字典中
            parameters["since_id"] = "\(since_id)"
        }
        //上啦刷新
        if max_id > 0 {
            //将max_id添加到参数字典中
            //上拉加载更多数据
            parameters["max_id"] = "\(max_id - 1)"
        }
    //实例化网络请求对象
    let AFN = AFHTTPSessionManager()

        
    //发起get请求
    AFN.GET(urlStirng, parameters: parameters, progress: nil, success: { (_, result) -> Void in
        print(result)
        print("===========")
        print(token)
        //转换为字典类型
        /// 极大的减少分之嵌套
        guard let dict = result as? [String:AnyObject] else {
            
            print("数据结构错误")
            return
        }
        //[[]]  数组
        guard let array = dict ["statuses"] as? [[String : AnyObject]] else {
            
            print("数据结构错误")
            return
        }
        
        //实例化临时数组
        var tempArray = [Status]()
        
        //遍历数组
        for item in array {
            
//            print(item)
//            let s = Status(dict: item)
            let s = Status(dict: item)
//            print(s)
            //添加模型数据
            tempArray.append(s)
        }
        
        //刷新页面
        finished(array: tempArray)
        
        
        
        //字典转模型
        
        
        //添加到数组
        
        
        //刷新页面
        
        
        
        
        
        
        }) { (_, error) -> Void in
            print(error)
        }
    
}

    
     }
    

